package libcore.util

import android.text.InputFilter
import android.text.Spanned

class MaxNumberInputFilter(private val max: Long, private val canEqualsZero: Boolean = false) : InputFilter {

    /**
     * source	新输入的字符串
     * start	开始位置 ，source的start
     * end	结束位置 ，source的end，或理解为长度
     * dest	输入之前文本框内容
     * dstart	光标所在的位置
     * dend //当前的结束位置，要替换或者添加的终止始位置，若为选择一串字符串进行更改，则为选中字符串 最后一个字符在dest中的位置
     */
    override fun filter(source: CharSequence?, start: Int, end: Int, dest: Spanned?, dstart: Int, dend: Int): CharSequence? {
        if (source.isNullOrEmpty()) return null
        // 计算数值
        val destText = dest.toString() // 原始字符串
        val first = destText.substring(0, dstart) // 光标之前的字符串
        // 如果不能为0,则不允许0开头
        if (!canEqualsZero && first == "" && source.startsWith("0")) {
            return ""
        }
        val second = destText.substring(dstart) // 光标之后的字符串
        val sum = first + source.toString() + second // 输入之后的字符串
        runCatching {
            sum.toLong()
        }.onSuccess {
            if ((!canEqualsZero && it == 0L) || it > max) {
                return ""
            }
        }.onFailure {
            return ""
        }

        return null
    }
}